import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:hive/hive.dart';
import 'package:pilipala/common/widgets/http_error.dart';
import 'package:pilipala/utils/feed_back.dart';
import 'package:pilipala/utils/logic_utils.dart';
import 'package:pilipala/utils/storage.dart';

class FavPanel extends StatefulWidget {
  const FavPanel({super.key, this.ctr, this.scrollController});
  final dynamic ctr;
  final ScrollController? scrollController;

  @override
  State<FavPanel> createState() => _FavPanelState();
}

class _FavPanelState extends State<FavPanel> {
  final Box<dynamic> localCache = GStorage.localCache;
  late Future _futureBuilderFuture;

  @override
  void initState() {
    super.initState();
    _futureBuilderFuture = widget.ctr!.queryVideoInFolder();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        AppBar(
          shape: const RoundedRectangleBorder(
            borderRadius: BorderRadius.vertical(
              top: Radius.circular(20),
            ),
          ),
          leading: IconButton(
              onPressed: () => Get.back(),
              icon: const Icon(Icons.close_outlined)),
          title: Text(
            '选择收藏夹',
            style: Theme.of(context)
                .textTheme
                .titleMedium!
                .copyWith(fontWeight: FontWeight.bold),
          ),
        ),
        Expanded(
          child: Material(
            child: FutureBuilder(
              future: _futureBuilderFuture,
              builder: (BuildContext context, AsyncSnapshot snapshot) {
                if (snapshot.connectionState == ConnectionState.done) {
                  Map data = snapshot.data as Map;
                  if (data['status']) {
                    return Obx(
                      () => ListView.builder(
                        controller: widget.scrollController,
                        itemCount: widget.ctr!.favFolderData.value.list!.length,
                        itemBuilder: (context, index) {
                          final item =
                              widget.ctr!.favFolderData.value.list![index];
                          return ListTile(
                            onTap: () =>
                                widget.ctr!.onChoose(item.favState != 1, index),
                            dense: true,
                            leading: Icon(LogicUtils.isPublic(item.attr)
                                ? Icons.folder_outlined
                                : Icons.lock_outline),
                            minLeadingWidth: 0,
                            title: Text(item.title!),
                            subtitle: Text(
                              '${item.mediaCount}个内容 - ${LogicUtils.isPublic(item.attr) ? '公开' : '私密'}',
                            ),
                            trailing: Transform.scale(
                              scale: 0.9,
                              child: Checkbox(
                                value: item.favState == 1,
                                onChanged: (bool? checkValue) =>
                                    widget.ctr!.onChoose(checkValue!, index),
                              ),
                            ),
                          );
                        },
                      ),
                    );
                  } else {
                    return HttpError(
                      errMsg: data['msg'],
                      fn: () => setState(() {}),
                    );
                  }
                } else {
                  // 骨架屏
                  return const Center(child: Text('请求中'));
                }
              },
            ),
          ),
        ),
        Divider(
          height: 1,
          color: Theme.of(context).disabledColor.withOpacity(0.08),
        ),
        Padding(
          padding: EdgeInsets.only(
            left: 20,
            right: 20,
            top: 12,
            bottom: MediaQuery.of(context).padding.bottom + 12,
          ),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.end,
            children: <Widget>[
              TextButton(
                onPressed: () => Get.back(),
                style: TextButton.styleFrom(
                  padding: const EdgeInsets.only(left: 30, right: 30),
                  backgroundColor:
                      Theme.of(context).colorScheme.onInverseSurface, // 设置按钮背景色
                ),
                child: const Text('取消'),
              ),
              const SizedBox(width: 10),
              TextButton(
                onPressed: () async {
                  feedBack();
                  await widget.ctr!.actionFavVideo();
                },
                style: TextButton.styleFrom(
                  padding: const EdgeInsets.only(left: 30, right: 30),
                  foregroundColor: Theme.of(context).colorScheme.onPrimary,
                  backgroundColor:
                      Theme.of(context).colorScheme.primary, // 设置按钮背景色
                ),
                child: const Text('确认'),
              ),
            ],
          ),
        ),
      ],
    );
  }
}
